{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/19-08-05_python_decorator /","result":{"data":{"markdownRemark":{"id":"8e11f1f1-10a5-5ddf-8817-e6a1afb8c0c7","html":"<h3 style=\"color:rgb(9,136,104)\">Decorator 와의 싸움</h3>\n<h4 id=\"decorator-개념\" style=\"position:relative;\"><a href=\"#decorator-%EA%B0%9C%EB%85%90\" aria-label=\"decorator 개념 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Decorator 개념</h4>\n<p>기존의 함수에 여러가지 기능을 추가하는 파이썬 구문이라고 한다.</p>\n<p>어떤 함수실행에 앞이나 뒤에 원하는 코드(함수)들이 같이 실행되도록 할 수 있다!</p>\n<p>함수 또는 함수의 인자들을 활용 할 수도 있다.</p>\n<p>fnA() ⇒ fnB ⇒ …fnN</p>\n<h3 id=\"decorator-샘플-코드\" style=\"position:relative;\"><a href=\"#decorator-%EC%83%98%ED%94%8C-%EC%BD%94%EB%93%9C\" aria-label=\"decorator 샘플 코드 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Decorator 샘플 코드</h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">decorator_function</span><span class=\"token punctuation\">(</span>original_function<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>  <span class=\"token comment\">#1</span>\n    <span class=\"token keyword\">def</span> <span class=\"token function\">wrapper_function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>  <span class=\"token comment\">#5</span>\n        <span class=\"token keyword\">return</span> original_function<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\">#7</span>\n    <span class=\"token keyword\">return</span> wrapper_function  <span class=\"token comment\">#6</span>\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">display</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>  <span class=\"token comment\">#2</span>\n    <span class=\"token keyword\">print</span> <span class=\"token string\">'display 함수가 실행됐습니다.'</span>  <span class=\"token comment\">#8</span>\n\ndecorated_display <span class=\"token operator\">=</span> decorator_function<span class=\"token punctuation\">(</span>display<span class=\"token punctuation\">)</span>  <span class=\"token comment\">#3</span>\n\ndecorated_display<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\">#4 </span>\n\n<span class=\"token string\">'display 함수가 실행됐습니다.'</span><span class=\"token comment\">#9</span></code></pre></div>\n<ol>\n<li>decorator_function 정의</li>\n<li>display 정의</li>\n<li>decorated<em>display라는 변수에 display 함수를 인자로 가진 decorator</em>function을 실행한 리턴값을 할당(리턴값은 wrapper_function 아직 실행되지 않음 )</li>\n<li>decorated<em>display()를 통해 wrapper</em>function을 호출</li>\n<li>wrapper_function 정의</li>\n<li>wrapper_function 호출</li>\n<li>original_function(=display) ()</li>\n<li>문자열 출력</li>\n</ol>\n<h3 id=\"decorator-why\" style=\"position:relative;\"><a href=\"#decorator-why\" aria-label=\"decorator why permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Decorator Why?</h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">decorator_function</span><span class=\"token punctuation\">(</span>original_function<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>  <span class=\"token comment\">#1</span>\n    <span class=\"token keyword\">def</span> <span class=\"token function\">wrapper_function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>  <span class=\"token comment\">#5</span>\n        실행시키길 원하는 코드<span class=\"token number\">1111</span>  <span class=\"token comment\">#7</span>\n        <span class=\"token keyword\">return</span> original_function<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">#8  </span>\n        실행시키길 원하는 코드<span class=\"token number\">2222</span>  <span class=\"token comment\">#9</span>\n    <span class=\"token keyword\">return</span> wrapper_function  <span class=\"token comment\">#6</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">display</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>  <span class=\"token comment\">#2</span>\n    <span class=\"token keyword\">print</span> <span class=\"token string\">'display 함수가 실행됐습니다.'</span>  <span class=\"token comment\">#8</span>\n\ndecorated_display <span class=\"token operator\">=</span> decorator_function<span class=\"token punctuation\">(</span>display<span class=\"token punctuation\">)</span>  <span class=\"token comment\">#3</span>\n\ndecorated_display<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\">#4 </span>\n\n실행시키길 원하는 코드 <span class=\"token number\">1111</span> <span class=\"token comment\">#10</span>\n<span class=\"token string\">'display 함수가 실행됐습니다.'</span><span class=\"token comment\">#11 </span>\n실행시키길 원하는 코드 <span class=\"token number\">2222</span> <span class=\"token comment\">#12 </span></code></pre></div>\n<p>위와 같이 내가 함수 실행에 내가 원하는 코드를 엮을 수 있다.</p>\n<p>그럼 그냥 함수 하나로 짜면 안돼?</p>\n<ul>\n<li>중복되는 부분을 함수에서 분리시켜 코드를 줄일 수 있다.</li>\n<li>그 외의 장점은… 생각해봐야겠다.</li>\n</ul>\n<p>위의 방법을 줄일 수 있는 방법이 있다! @심벌 사용하기</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># -*- coding: utf-8 -*-</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">decorator_function</span><span class=\"token punctuation\">(</span>original_function<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">def</span> <span class=\"token function\">wrapper_function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span> <span class=\"token string-interpolation\"><span class=\"token string\">f'</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>original_function<span class=\"token punctuation\">.</span>__name__<span class=\"token punctuation\">}</span></span><span class=\"token string\"> 함수가 호출되기전 입니다.'</span></span>\n        <span class=\"token keyword\">return</span> original_function<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> wrapper_function\n\n\n<span class=\"token decorator annotation punctuation\">@decorator_function</span>  <span class=\"token comment\">#1</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">display_1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span> <span class=\"token string\">'display_1 함수가 실행됐습니다.'</span>\n\n\n<span class=\"token decorator annotation punctuation\">@decorator_function</span>  <span class=\"token comment\">#2</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">display_2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span> <span class=\"token string\">'display_2 함수가 실행됐습니다.'</span>\n\n<span class=\"token comment\"># display_1 = decorator_function(display_1)  #3</span>\n<span class=\"token comment\"># display_2 = decorator_function(display_2)  #4</span>\n\ndisplay_1<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\ndisplay_2<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token string\">'display_1 함수가 실행됐습니다.'</span>\n<span class=\"token string\">'display_2 함수가 실행됐습니다.'</span></code></pre></div>\n<p>변수를 붙이고 실행 시키는 대신 @심벌을 데코레이션 함수와 함수 정의에 붙여 준다.</p>\n<p>그럼 동일한 결과를 얻는다 .</p>\n<h3 id=\"decorator-실전\" style=\"position:relative;\"><a href=\"#decorator-%EC%8B%A4%EC%A0%84\" aria-label=\"decorator 실전 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Decorator 실전</h3>\n<h3 id=\"original_function의-인자가-있을-경우\" style=\"position:relative;\"><a href=\"#original_function%EC%9D%98-%EC%9D%B8%EC%9E%90%EA%B0%80-%EC%9E%88%EC%9D%84-%EA%B2%BD%EC%9A%B0\" aria-label=\"original_function의 인자가 있을 경우 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>original_function의 인자가 있을 경우</h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">decorator_function</span><span class=\"token punctuation\">(</span>original_function<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">def</span> <span class=\"token function\">wrapper_function</span><span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>args<span class=\"token punctuation\">,</span> <span class=\"token operator\">**</span>kwargs<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>  <span class=\"token comment\">#1</span>\n        <span class=\"token keyword\">print</span> <span class=\"token string-interpolation\"><span class=\"token string\">f'</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>original_function<span class=\"token punctuation\">.</span>__name__<span class=\"token punctuation\">}</span></span><span class=\"token string\"> 함수가 호출되기전 입니다.'</span></span>\n        <span class=\"token keyword\">return</span> original_function<span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>args<span class=\"token punctuation\">,</span> <span class=\"token operator\">**</span>kwargs<span class=\"token punctuation\">)</span>  <span class=\"token comment\">#2</span>\n    <span class=\"token keyword\">return</span> wrapper_function\n\n\n<span class=\"token decorator annotation punctuation\">@decorator_function</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">display</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span> <span class=\"token string\">'display 함수가 실행됐습니다.'</span>\n\n\n<span class=\"token decorator annotation punctuation\">@decorator_function</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">display_info</span><span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">,</span> age<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span> <span class=\"token string\">\"display_info({name}, {}) 함수가 실행됐습니다.\"</span>\n\ndisplay<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span>\ndisplay_info<span class=\"token punctuation\">(</span><span class=\"token string\">'John'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">25</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token string\">\"display_info 함수가 호출되기전 입니다.\"</span>\n<span class=\"token string\">\"display_info(John, 25) 함수가 실행됐습니다.\"</span></code></pre></div>\n<p>display 함수가 인자 (name, age)를 받을 경우에는 wrapper 함수와 original_function에 인자를 설정해줘서 인자가 전달 될 수 있도록 한다. *args, **kwargs 를 같이 써줘야 유동적으로 인자를 받을 수 있다.</p>\n<h3 id=\"decorator에-parameter-집어넣기\" style=\"position:relative;\"><a href=\"#decorator%EC%97%90-parameter-%EC%A7%91%EC%96%B4%EB%84%A3%EA%B8%B0\" aria-label=\"decorator에 parameter 집어넣기 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Decorator에 parameter 집어넣기</h3>\n<p>그리고 decorator_function에도 parameter를 집어 넣는 것도 가능하다!</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># 1. 데코레이터를 데코레이터 해놓기- 이렇게 함으로써 데코레이터가 함수이외의 인자를 넣을수 있는 자리를 만들어 준다. </span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">parametrized</span><span class=\"token punctuation\">(</span>dec<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">def</span> <span class=\"token function\">layer</span><span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>args<span class=\"token punctuation\">,</span> <span class=\"token operator\">**</span>kwargs<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">def</span> <span class=\"token function\">repl</span><span class=\"token punctuation\">(</span>f<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">return</span> dec<span class=\"token punctuation\">(</span>f<span class=\"token punctuation\">,</span> <span class=\"token operator\">*</span>args<span class=\"token punctuation\">,</span> <span class=\"token operator\">**</span>kwargs<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</span> repl\n    <span class=\"token keyword\">return</span> layer\n\n<span class=\"token decorator annotation punctuation\">@parametrized</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">decorator_function</span><span class=\"token punctuation\">(</span>original_function<span class=\"token punctuation\">,</span>paramofDeco<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">def</span> <span class=\"token function\">wrapper_function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span> <span class=\"token string-interpolation\"><span class=\"token string\">f'</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>original_function<span class=\"token punctuation\">.</span>__name__<span class=\"token punctuation\">}</span></span><span class=\"token string\"> 함수가 호출되기전 입니다.'</span></span>\n        <span class=\"token keyword\">return</span> original_function<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> paramofDeco\n    <span class=\"token keyword\">return</span> wrapper_function\n\n<span class=\"token decorator annotation punctuation\">@decorator_function</span><span class=\"token punctuation\">(</span>paramofDeco<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">display_3</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n\t    <span class=\"token keyword\">print</span> <span class=\"token string\">'display_3 함수가 실행됐습니다.decorator_function() 인자는 '</span>\n\ndisplay_3<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n <span class=\"token string\">'display_3 함수가 호출되기전 입니다.'</span>\n <span class=\"token string\">'display_3 함수가 실행됐습니다.decorator_function() 인자는 paramofDeco'</span>\n \n\n<span class=\"token comment\"># 2. 데코레이터를 한번 더 싸기</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">deco_decorator_function</span><span class=\"token punctuation\">(</span>paramofDeco<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n  <span class=\"token keyword\">def</span> <span class=\"token function\">decorator_function</span><span class=\"token punctuation\">(</span>func<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">def</span> <span class=\"token function\">wrapper</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n      <span class=\"token keyword\">print</span> <span class=\"token string-interpolation\"><span class=\"token string\">f'</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>original_function<span class=\"token punctuation\">.</span>__name__<span class=\"token punctuation\">}</span></span><span class=\"token string\"> 함수가 호출되기전 입니다.'</span></span>\n      result <span class=\"token operator\">=</span> func<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n      <span class=\"token keyword\">return</span> result <span class=\"token operator\">+</span> paramofDeco\n    <span class=\"token keyword\">return</span> wrapper\n  <span class=\"token keyword\">return</span> decorator_function\n\n<span class=\"token decorator annotation punctuation\">@deco_decorator_function</span><span class=\"token punctuation\">(</span>paramofDeco<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">display_4</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n\t    <span class=\"token keyword\">print</span> <span class=\"token string\">'display_4 함수가 실행됐습니다.decorator_function() 인자는 '</span>\n\ndisplay_4<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n <span class=\"token string\">'display_4 함수가 호출되기전 입니다.'</span>\n <span class=\"token string\">'display_4 함수가 실행됐습니다.decorator_function() 인자는 paramofDeco'</span></code></pre></div>\n<p>1의 방법은 한번 만들어 놓으면 @심벌로 다른 데코레이터 함수들선언시에 parameter를 쉽게 받을 수 있도록 할 수 있다. (코드 1줄 줄일 수 있네. n번 늘어나면 n줄 Save! )</p>\n<p>2의 방법은 그때 그때 적용</p>\n<p>*주의사항 데코레이터 함수가 parameter 값을 받도록 설정했을때, 만약 paremeter값을 받지 않아도 실행코드 ” () ” 만들어 놔야한다. 안그러면 실행이 되지 않는다. (파라미터값을 넣고 데코레이터 실행한다는걸로 코드가 작성되었기 때문이다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\">#위의 데코레이션을 사용한다고 가정했을때 </span>\n\n<span class=\"token decorator annotation punctuation\">@deco_decorator_function</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">display_5</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n\t<span class=\"token keyword\">print</span> <span class=\"token string\">\" something \"</span>  \n\ndisplay_5<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\">##실행에러 </span>\n\n<span class=\"token decorator annotation punctuation\">@deco_decorator_function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>  \n<span class=\"token keyword\">def</span> <span class=\"token function\">display_6</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n\t<span class=\"token keyword\">print</span> <span class=\"token string\">\"something\"</span> \n\ndisplay_6<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> \n\n<span class=\"token string\">\"something\"</span></code></pre></div>","fields":{"slug":"/posts/19-08-05_python_decorator /","tagSlugs":["/tag/python/","/tag/method/","/tag/concept/"]},"frontmatter":{"date":"2019-08-05T01:23:45.678Z","description":"첨보는 데코레이터 코드 이쁘게 데코해주나요? Error~! ","tags":["Python","Method","Concept"],"title":"Decorator 톺아보기 "}}},"pageContext":{"slug":"/posts/19-08-05_python_decorator /"}},"staticQueryHashes":["251939775","3613830147","401334301"]}